Read in SF trees data

sf_trees <- read_csv(here("data","sf_trees","sf_trees.csv"))
## Parsed with column specification:
## cols(
##   tree_id = col_double(),
##   legal_status = col_character(),
##   species = col_character(),
##   address = col_character(),
##   site_order = col_double(),
##   site_info = col_character(),
##   caretaker = col_character(),
##   date = col_date(format = ""),
##   dbh = col_double(),
##   plot_size = col_character(),
##   latitude = col_double(),
##   longitude = col_double()
## )

Basic wrangling reminders

Refresh some skills for data wrangling & summary statistics using functions in the dplyr package.

Find the top 5 highest observations of trees by legal status, do some wrangling, make a graph.

top_5_status <- sf_trees %>% 
  count(legal_status) %>%   # combines recognize groups, summarize, can list multiple levels 
  drop_na(legal_status) %>% 
  rename(tree_count = n) %>% 
  dplyr::relocate(tree_count) %>% 
  slice_max(tree_count, n=5)

Make a graph of top 5 observations by legal status

ggplot(data = top_5_status, aes(x=fct_reorder(legal_status,tree_count), y=tree_count))+
  geom_col()+
  labs(x = "Legal Status", y = "Tree Count")+
  coord_flip()+
  theme_minimal()

A few more data wrangling refresher examples

Only want to keep observations (row) for Blackwood Acacia trees

blackwood_acacia <- sf_trees %>% 
  filter(str_detect(species, "Blackwood Acacia")) %>%  #from stringr package
  select(legal_status, date, latitude, longitude)

ggplot(data = blackwood_acacia, aes(x=longitude, y=latitude))+
  geom_point()
## Warning: Removed 27 rows containing missing values (geom_point).

tidyr::separate() or unite() functions

sf_trees_sep <- sf_trees %>%
  separate(species, into = c("spp_scientific", "spp_common"), sep = "::")

Example tidyr::unite

sf_trees_unite <- sf_trees %>% 
  unite("id_status", tree_id:legal_status, sep = "_cool!_")

Make some actual maps of blackwood acacia trees in SF

st_as_sf() to convert latitude & longitude to spatial coordinates

blackwood_acacia_sp <- blackwood_acacia %>% 
  drop_na(longitude, latitude) %>% 
  st_as_sf(coords = c("longitude","latitude"))
# does not have an assigned coordinate ref system yet

st_crs(blackwood_acacia_sp) = 4326

ggplot(data = blackwood_acacia_sp)+
  geom_sf(color="darkgreen")

Read in SF roads shapefile:

sf_map <- read_sf(here("data","sf_map","tl_2017_06075_roads.shp"))

st_transform(sf_map, 4326)
## Simple feature collection with 4087 features and 4 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: -122.5136 ymin: 37.70813 xmax: -122.3496 ymax: 37.83213
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
## Warning: `...` is not empty.
## 
## We detected these problematic arguments:
## * `needs_dots`
## 
## These dots only exist to allow future extensions and should be empty.
## Did you misspecify an argument?
## # A tibble: 4,087 x 5
##    LINEARID   FULLNAME    RTTYP MTFCC                              geometry
##    <chr>      <chr>       <chr> <chr>                      <LINESTRING [°]>
##  1 110498938… Hwy 101 S … M     S1400 (-122.4041 37.74842, -122.404 37.748…
##  2 110498937… Hwy 101 N … M     S1400 (-122.4744 37.80691, -122.4746 37.80…
##  3 110366022… Ludlow Aly… M     S1780 (-122.4596 37.73853, -122.4596 37.73…
##  4 110608181… Mission Ba… M     S1400 (-122.3946 37.77082, -122.3929 37.77…
##  5 110366689… 25th Ave N  M     S1400 (-122.4858 37.78953, -122.4855 37.78…
##  6 110368970… Willard N   M     S1400 (-122.457 37.77817, -122.457 37.7781…
##  7 110368970… 25th Ave N  M     S1400 (-122.4858 37.78953, -122.4858 37.78…
##  8 110498933… Avenue N    M     S1400 (-122.3643 37.81947, -122.3638 37.82…
##  9 110368970… 25th Ave N  M     S1400 (-122.4854 37.78982, -122.4858 37.78…
## 10 110367749… Mission Ba… M     S1400 (-122.3865 37.77086, -122.3878 37.77…
## # … with 4,077 more rows
ggplot(data = sf_map)+
  geom_sf()

Combine blackwood acacia tree observations & SF roads map:

ggplot()+
  geom_sf(data= sf_map, size =0.1, color = "darkgray")+
  geom_sf(data= blackwood_acacia_sp, color = "red", size=0.5)+
  theme_void()

Now an interactive map:

tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(blackwood_acacia_sp) + 
  tm_dots()